﻿using System;
using LM.InterfacesFabricas.Basicos.Enumeradores;

namespace LM.Tela.Desktop
{

    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Fabricas;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using System.Collections.Generic;
    using System.Globalization;

    public partial class frmVaga
    {
        public frmVaga()
        {
            InitializeComponent();
            BindTipoDeVaga();
        }

        private void BindTipoDeVaga()
        {
            cmbTipo.DataSource = Enum.GetValues(typeof (EnumTipoDeVaga));
            cmbTipo.SelectedIndex = -1;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var vaga = new DtoVaga { Codigo = codigo, Numero = Convert.ToInt32(txtDescricao.Text), TipoDeVaga = cmbTipo.Text};

            var servicoDeVaga = FabricaGenerica.Crie<IServicoDeVaga>();
            if (!EmEdicao())
            {
                servicoDeVaga.Cadastre(vaga);
            }
            else
            {
                servicoDeVaga.Atualize(vaga);
            }

            PrepareTelaParaNovoRegistro();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtDescricao.Text = string.Empty;
            cmbTipo.SelectedIndex = -1;
        }

        private void CarregueItensJaCadastrados()
        {
            var servicoDeVaga = FabricaGenerica.Crie<IServicoDeVaga>();
            var vagas = servicoDeVaga.ConsulteTodos();

            grdVagas.DataSource = vagas;
        }

        private void frmMarca_Load(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void grdVagas_CellDoubleClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var vaga = ((IList<DtoVaga>)grdVagas.DataSource)[e.RowIndex];

                txtCodigo.Text = vaga.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtDescricao.Text = vaga.Numero.ToString();
                cmbTipo.Text = vaga.TipoDeVaga;
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Vaga não selecionada para edição.");
            }
            else
            {
                var servicoDeVaga = FabricaGenerica.Crie<IServicoDeVaga>();
                servicoDeVaga.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }
    }
}
